API
注意,预期Buff大部分都应在数据编辑器中制作,本文所述的方式很可能已非最佳实践
(文档中有些地方使用Buff,有些地方使用「状态」,指的是一个东西)
在逻辑上,状态可以用来管理单位的[属性]与[限制]变化;在表现上,状态可以用来给单位绑定特效、音效甚至改变单位的模型属性。
当你制作一个复杂的技能效果时,它应该是有许多状态组合而成的。
制作一个状态,单位在获得该状态5秒后失去该状态。
-- 给状态一个合适的名字,以便在其他地方添加这个状态
local mt = base.buff['持续5秒的状态']
-- 设置属性[持续时间]为5秒
mt.time = 5
你可以在合适的时候给单位添加状态,例如我们有个单位
u
:
-- 添加状态,将状态对象保存在变量[buff]中
local buff = u:add_buff '持续5秒的状态'
{
-- 关联技能
skill = skill,
}
你可以再次修改这个状态的属性:
-- 将刚刚添加的状态的剩余时间改为10秒
buff:set_remaining(10)
创建
创建/获取状态
- 参数
- name (string) - 状态名
- 返回
- buff (buff) - 状态数据表
如果ClientBuff中有同名的状态定义,则会包含定义的属性。使用add_buff来给单位添加状态。
-- 将创建的状态保存下来,你之后需要为它进行设置,以及注册事件
local mt = base.buff[name]
设置
只能在创建时设置:
cover_global
全局覆盖类型
决定如何视为同名状态,可以是以下的值(integer):
0
:必须名字和来源都相同才视为同名状态,触发覆盖。这是默认值。1
:只要名字相同就会视为同名状态,触发覆盖
cover_max
最大生效数量
当单位身上有多个同名状态时,最多可以同时生效的状态数量(integer)。这个值默认为0,表示无限制。只有当cover_type为共存模式时才有意义。关于同名状态的排序方式见on_cover。
cover_type
共存模式
决定了单位获得多个同名状态时的行为,可以是以下的值(integer):
0
:独占模式,单位只能同时保留一个同名状态。on_cover可以决定哪个状态保留下来。1
:共存模 式,单位可以同时保留多个同名状态。on_cover可以决定这些状态的排序,以便通过cover_max来只让部分状态生效。
keep
死亡后保留
决定了单位死亡后,状态是否继续保留;以及单位死亡时是否能添加该状态。可以是以下的值(boolean):
true
:单位死亡时保留状态,状态也可以添加给死亡的单位。false
:单位死亡时移除状态,状态无法添加给死亡的单位。这是默认值。
sync
同步方式
这个值决定了状态可以被哪些人看见,见同步方式,默认值为none
。同步方式的参照单位为状态的source,而不是状态的target。
属性
可以在创建或[unit:add_buff]时设置:
pulse
心跳
触发on_pulse事件的频率(number),单位为秒。这个值的精度受到逻辑帧的影响。默认值为1帧。
skill
技能
在[unit:add_buff]时设置。
source
来源
状态的来源(unit),在[unit:add_buff]时设置。这会影响状态的sync属性的参照物。如果不设置,则为[unit:add_buff]时的对象。
target
目标
状态的目标(unit)。该属性不需要设置,为[unit:add_buff]时的对象。
time
持续时间
状态会在经过此时间后自动移除。这个值类型为(number),默认为一个非常巨大的值,表示持续无限时间。
stack
层数
自定义属性
你可以在创建或[unit:add_buff]时给状态添加任何自定义的属性(当然不能重名),之后便可以从状态对象中将其读出,以便实现自定义功能。
方法
add_stack
增加层数
由c++实现的api
- 参数
- count (integer) - 状态的层数
如果状态的属性允许,层数会显示在状态图标上。
buff:add_stack(count)
get_pulse
获取心跳
由c++实现的api
- 返回
- pulse (number) - 触发on_pulse事件的周期
local pulse = buff:get_pulse()
get_remaining
获取剩余时间
由c++实现的api
- 返回
- time (number) - 状态的剩余持续时间(秒)
local time = buff:get_remaining()
get_stack
获取层数
由c++实现的api
- 返回
- count (integer) - 状态的层数
local count = buff:get_stack()
remove
移除状态
由c++实现的api
buff:remove()
set_pulse
设置周期